#define _CRT_SECURE_NO_WARNINGS 1

//#include<stdio.h>
//void swap(int *m, int *n)
//{
//	int temp = *m;
//	*m = *n;
//	*n = temp;
//}
//int gcd(int m, int n)
//{
//	if (m < n)
//	{
//		swap(&m, &n);
//	}
//	if (m%n == 0)
//	{
//		return n;
//	}
//	else
//	{
//		while (n != 0)
//		{
//			int z = m%n;
//			m = n;
//			n = z;
//		}
//		return m;
//	}
//}
//int GCM(int p, int q)
//{
//	int temp = GCD(p, q);
//	return p*q / temp;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	for (int i = 1; i <= n; i++)
//	{
//		int a0, a1, b0, b1;
//		scanf("%d%d%d%d", &a0, &a1, &b0, &b1);
//		int count = 0;
//		for (int x = a1; x <= b1; x++)
//		{
//			if (GCD(x, a0) == a1&&GCM(x, b0) == b1)
//			{
//				count++;
//			}
//		}
//		printf("%d\n", count);
//	}
//	return 0;
//}





//#include<stdio.h>
//#include<math.h>
//int gcd(int m, int n)
//{
//	while (n != 0)
//	{
//		int z = m%n;
//		m = n;
//		n = z;
//	}
//	return m;
//	
//}
//int prime(int* num, int i,int count)
//{
//	for (int j = 0; j < count; j++)
//	{
//		if (num[j] == i)
//		{
//			return 0;
//		}
//	}
//	return 1;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	for (int i = 0; i < n; i++)
//	{
//		int a0, a1, b0, b1;
//		scanf("%d%d%d%d", &a0, &a1, &b0, &b1);
//		
//		if (a0%a1 != 0 || b1%b0 != 0||b1%a1 != 0)
//		{
//			int count = 0;
//			count = 0;
//			printf("%d", count);
//			break;
//		}
//		else
//		{
//			int m = b1 / a1;
//			int p = 1;
//			int A = a0 / a1;
//			int B = b1 / b0;
//			/*for (p = 1; p < m;p++)
//			{
//				if (m%p==0)
//				{
//					if (gcd(A,p) == 1 && gcd(B,m/p) == 1)
//					{
//						count++;
//					}
//				}
//			}*/
//			int num[25] = { 0 };
//			int count = 0;
//			for (int i = 2; i <= A; i++)
//			{
//				if (A%i == 0)
//				{
//					num[count] = i;
//					count++;
//				}
//				while (A%i == 0)
//				{
//					A /= i;
//				}
//			}
//			for (int i = 2; i <= B; i++)
//			{
//				if (B%i == 0)
//				{
//					if (prime(num, i,count))
//					{
//						num[count] = i;
//						count++;
//					}
//				}
//				while (B%i == 0)
//				{
//					B /= i;
//				}
//			}
//			int count_1 = m;
//			for (int j = 0; j < count; j++)
//			{
//				count_1 -= (m / num[j]);
//			}
//			printf("%d\n",count_1);
//		}
//		
//		
//	}
//	return 0;
//}
//












#include<stdio.h>
int gcd(int m, int n)
{
	while (n != 0)
	{
		int z = m%n;
		m = n;
		n = z;
	}
	return m;

}
int prime(int x,int a0,int a1,int b0,int b1)
{
	if (x%a1 != 0)
	{
		return 0;
	}
	else if (gcd(x / a1, a0 / a1) == 1 && gcd(b1 / b0, b1 / x) == 1)
	{
		return 1;
	}
	else
		return 0;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		int a0, a1, b0, b1;
		scanf("%d%d%d%d", &a0, &a1, &b0, &b1);
		int count = 0;
		if (a0%a1 != 0 || b1%b0 != 0 || b1%a1 != 0)
		{
			count = 0;
			printf("%d\n", count);
			break;
		}
		else
		{
			int A = a0 / a1;
			int B = b1 / b0;
			for (int x = 1; x*x <= b1; x += 1)
			{
				if (b1%x == 0)
				{
					count += prime(x, a0, a1, b0, b1);
					if (b1 / x != x)
					{
						int m = b1 / x;
						count += prime(m, a0, a1, b0, b1);
					}
				}
			}
		}
		printf("%d\n", count);
	}
	return 0;
}